package com.ysoo.mail;

import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.stereotype.Component;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.security.GeneralSecurityException;
import java.util.Properties;

/**
 * description:
 * author: Wangys
 * Date: 2018-11-12
 */
@Component
public class MailService {

    // 发送邮件
    public static Boolean sendEmail() {
        final Properties props = new Properties();
        //登入邮箱服务器是需要验证的
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.port", 25);
        //设置协议
        props.put("mail.transport.protocol", "smtp");
        // 发件人的账号
        props.put("mail.user", "wangyansong_1991@163.com");
        // 访问SMTP服务时需要提供的密码 非常重要 不是你登陆邮箱的密码 是需要到163 邮箱设置的SMTP的密码
        props.put("mail.password", "aini99");
        // 构建授权信息，用于进行SMTP进行身份验证
//        MailSSLSocketFactory sf = null;
//        try {
//            sf = new MailSSLSocketFactory();
//            sf.setTrustAllHosts(true);
//        } catch (GeneralSecurityException e1) {
//            e1.printStackTrace();
//        }
//        props.put("mail.smtp.ssl.enable", "true");
//        props.put("mail.smtp.ssl.socketFactory", sf);
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息，创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        //        mailSession.setDebug(true);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        try {
            String nick = "";
            nick = javax.mail.internet.MimeUtility.encodeText("Java邮件测试-小标题");
            // 设置发件人
            InternetAddress from = new InternetAddress(nick + " <"+ props.getProperty("mail.user") + ">");
            message.setFrom(from);
            Address[] a = new Address[1];
            // 接收方回复的邮件地址
            a[0] = new InternetAddress("yansong_wang@foxmail.com");
            message.setReplyTo(a);
            // 设置收件人
            InternetAddress to = new InternetAddress("yansong_wang@foxmail.com");
            message.setRecipient(MimeMessage.RecipientType.TO, to);
            // 设置邮件标题
            message.setSubject("Java邮件测试-大标题");

            //添加附件部分
            //邮件内容部分1---文本内容
            MimeBodyPart body0 = new MimeBodyPart(); //邮件中的文字部分
            body0.setContent("<p>Hello， JavaMail</p>\n 这是我的第一封JavaMail测试，加油吧~~~","text/html;charset=utf-8");

            //邮件内容部分2---附件1
            MimeBodyPart body1 = new MimeBodyPart(); //附件1
            body1.setDataHandler( new DataHandler( new FileDataSource("src\\main\\resources\\static\\image\\timg.jpg")));//./代表项目根目录下

            body1.setFileName( MimeUtility.encodeText("timg.jpg"));//中文附件名，解决乱码

            //把上面的3部分组装在一起，设置到msg中
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(body0);
//            mm.addBodyPart(body1);
            message.setContent(mm);

            // 设置邮件的内容体
            // message.setContent("题在我使用postman来上传图片时候，死活都没过。。显示这个，问题在哪呢？","text/html;charset=UTF-8");
            // 发送邮件
            Transport.send(message);
        }
        catch (Exception e) {
            String err = e.getMessage();
            // 在这里处理message内容， 格式是固定的
            System.out.println("====:"+err);
            return false;
        }
        return true;
    }


}
